package demo2;

import java.util.HashMap;
import java.util.Map;

public class LeetCode904 {
    public int totalFruit1(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        int n = nums.length, len = 0;
        for (int left = 0, right = 0; right < n; right++) {
            map.put(nums[right], map.getOrDefault(nums[right], 0) + 1);
            while (map.size() > 2) {
                map.put(nums[left], map.get(nums[left]) - 1);
                if(map.get(nums[left]) == 0) map.remove(nums[left]);
                left++;
            }
            len = Math.max(len, right - left + 1);
        }
        return len;
    }

    public int totalFruit2(int[] nums) {
        int n = nums.length, kinds = 0, len = 0;
        int[] hash = new int[n];
        for (int left = 0, right = 0; right < n; right++) {
            int in = nums[right];
            if (hash[in]++ == 0) kinds++;
            while (kinds > 2) {
                int out = nums[left++];
                if (--hash[out] == 0) kinds--;
            }
            len = Math.max(len, right - left + 1);
        }
        return len;
    }
}
